package models

import (
	"activity_srv/basic/config"
	"gorm.io/gorm"
	"time"
)

type Order struct {
	Id          uint64         `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	OrderNo     string         `gorm:"column:order_no;type:varchar(100);comment:订单号;default:NULL;" json:"order_no"`          // 订单号
	AddressId   int32          `gorm:"column:address_id;type:int;comment:地址id;default:NULL;" json:"address_id"`              // 地址id
	UserId      int32          `gorm:"column:user_id;type:int;comment:用户id;default:NULL;" json:"user_id"`                    // 用户id
	GoodsId     int32          `gorm:"column:goods_id;type:int;comment:商品id;default:NULL;" json:"goods_id"`                  // 商品id
	GoodsNum    int32          `gorm:"column:goods_num;type:int;comment:购买商品的数量;default:NULL;" json:"goods_num"`             // 购买商品的数量
	GoodsName   string         `gorm:"column:goods_name;type:varchar(30);comment:商品名称;default:NULL;" json:"goods_name"`      // 商品名称
	GoodsPrice  int64          `gorm:"column:goods_price;type:bigint;comment:商品价格;default:NULL;" json:"goods_price"`         // 商品价格
	OrderNum    int32          `gorm:"column:order_num;type:int;comment:订单数量;default:NULL;" json:"order_num"`                // 订单数量
	OrderPrice  float64        `gorm:"column:order_price;type:decimal(10, 2);comment:订单价格;default:NULL;" json:"order_price"` // 订单价格
	PayCType    int32          `gorm:"column:pay_c_type;type:int;comment:支付方式：1：微信2：支付宝;default:NULL;" json:"pay_c_type"`    // 支付方式：1：微信2：支付宝
	PayStatus   int32          `gorm:"column:pay_status;type:int;comment:支付状态：1：已支付，2：未支付;default:NULL;" json:"pay_status"`  // 支付状态：1：已支付，2：未支付
	OrderStatus int32          `gorm:"column:order_status;type:int;comment:订单状态;default:NULL;" json:"order_status"`          // 订单状态
	CreatedAt   time.Time      `gorm:"column:created_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt   time.Time      `gorm:"column:updated_at;type:datetime(3);default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt   gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (o *Order) TableName() string {
	return "order"
}
func (o *Order) DistributionGetOrderId() error {
	return config.DB.First(&o).Error
}
func (o *Order) CreateOrder() error {
	return config.DB.Create(o).Error
}

// 根据订单号获取订单
func (o *Order) GetOrderByOrderNo() error {
	return config.DB.Where("order_no = ?", o.OrderNo).First(&o).Error
}

// 根据用户ID和商品ID获取订单
func (o *Order) GetOrderByUserIdAndGoodsId() error {
	return config.DB.Where("user_id = ? AND goods_id = ?", o.UserId, o.GoodsId).First(&o).Error
}

// 根据活动ID和商品ID获取最新的订单
func (o *Order) GetLastOrderByActivityIdAndGoodsId(activityId int64, goodsId int32) error {
	// 这里我们假设通过商品ID和创建时间来获取最新的订单
	// 实际应用中可能需要根据具体的业务逻辑来调整
	return config.DB.Where("goods_id = ?", goodsId).Order("created_at DESC").First(&o).Error
}

// 更新订单状态
func (o *Order) UpdateOrderStatus(db *gorm.DB) error {
	return db.Model(&Order{}).Where("id = ?", o.Id).Update("pay_status", o.PayStatus).Error
}

// 查询订单
func (o *Order) GetOrderId() error {
	return config.DB.First(&o).Error
}
